<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Programmation structurée</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Programmation_structur%C3%A9e"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Programmation_structurée rootpage-Programmation_structurée skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Programmation structurée</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>La <b>programmation structurée</b> est un <a href="Paradigme_(programmation)" title="Paradigme (programmation)">paradigme important de la programmation</a> qui consiste à utiliser les <a href="Structure_de_contr%C3%B4le" title="Structure de contrôle">structures de contrôle</a> pour améliorer la clarté, la qualité et le temps de développement d'un <a href="Programme_informatique" title="Programme informatique">programme informatique</a>. Elle constitue un sous-ensemble de la <a href="Programmation_imp%C3%A9rative" title="Programmation impérative">programmation impérative</a>.
</p><p>La programmation structurée est célèbre pour avoir tenté d’éliminer l'instruction <i><a href="Goto_(informatique)" title="Goto (informatique)">goto</a></i>, ou, du moins, de limiter son usage à des cas inhabituels et graves <span class="need_ref" title="Ce passage nécessite une référence." style="cursor:help;">(que l'on nommerait plutôt des <a href="Syst%C3%A8me_de_gestion_d'exceptions" title="Système de gestion d'exceptions">exceptions</a>)</span><sup class="need_ref_tag" style="padding-left:2px;">[réf. nécessaire]</sup>.
</p><p>Elle apparaît vers 1970. Issue de travaux de <a href="Nicklaus_Wirth" class="mw-redirect" title="Nicklaus Wirth">Nicklaus Wirth</a> pour son <a href="Algol_W" title="Algol W">Algol W</a>, elle reçoit son coup d'envoi avec l'article fondateur de <a href="Dijkstra" class="mw-redirect" title="Dijkstra">Dijkstra</a> dans <i><a href="Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i> intitulé « <i>Go To statement considered harmful</i> » (« L'instruction <a href="Goto_(informatique)" title="Goto (informatique)">GOTO</a> est considérée nocive »)<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup class="reference cite_virgule">,</sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Usage">Usage</h2></div>
<p>La programmation structurée est possible dans n'importe quel <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a> <a href="Programmation_proc%C3%A9durale" title="Programmation procédurale">procédural</a>, mais certains, comme le <a href="FORTRAN" class="mw-redirect" title="FORTRAN">FORTRAN</a> IV, s'y prêtaient très mal. Vers <a href="1970" title="1970">1970</a>, la programmation structurée devint une technique populaire, et les langages de programmation procéduraux intégrèrent à l'image d'<a href="Algol_(langage)" title="Algol (langage)">Algol</a> et en le dépassant des mécanismes rendant aisée la programmation structurée (<a href="APL_(langage)" title="APL (langage)">faisant tomber en désuétude</a> des langages parfois novateurs, mais qui facilitaient une programmation dé-structurée). Parmi les langages de programmation les plus structurants, on trouve <a href="PL/I" title="PL/I">PL/I</a>, <a href="Pascal_(langage)" title="Pascal (langage)">Pascal</a> et, plus tardivement pour les projets de très grande taille, <a href="Ada_(langage)" title="Ada (langage)">Ada</a>.
</p><p>Pour l'écriture de fragments assez courts, la programmation structurée recommande une organisation hiérarchique simple du code. On peut le faire dans la plupart des langages de programmation modernes par l'utilisation de structures de contrôles <i>while</i>, <i>repeat</i>, <i>for</i>, <i>if .. then .. else</i>. Il est également recommandé de n'avoir qu'un point d'entrée pour chaque boucle (et un point de sortie unique dans la programmation structurée originelle), et quelques langages l'imposent. Cette technique est toutefois peu suivie, car elle encourage l'utilisation de plus nombreuses variables pour remplacer les sorties immédiates par des états ; or la multiplication des <a href="Variable_(informatique)" title="Variable (informatique)">variables</a> augmente la charge cognitive pour comprendre un fragment de <a href="Code_source" title="Code source">code</a>.
</p><p>Les programmeurs décomposent leur code en <a href="Module_(programmation)" title="Module (programmation)">modules</a> (appelés <a href="Routine_(informatique)" title="Routine (informatique)">fonctions</a> et procédures dans certains langages) ne dépassant guère 60 lignes, afin d'être présente en entier sous les yeux. On recommande aux programmes d'éviter l'usage des <a href="Variable_globale" title="Variable globale">variables globales</a> afin de prévenir les <a href="Effet_de_bord_(informatique)" title="Effet de bord (informatique)">effets de bord</a> (<i>side effects</i>) : les sous-programmes utilisent donc des <a href="Variable_locale" title="Variable locale">variables locales</a> et peuvent agir sur des arguments fournis explicitement en paramètre, par valeur (leur contenu) ou par référence (l'adresse de ce contenu). Ces techniques aident à créer des petits morceaux de code, faciles à comprendre isolément et sans nécessité d'avoir à en connaître le contexte.
</p>
<div class="mw-heading mw-heading2"><h2 id="Méthodologie_associée"><span id="M.C3.A9thodologie_associ.C3.A9e"></span>Méthodologie associée</h2></div>
<p>La programmation structurée est souvent utilisée conjointement à la méthodologie de développement par décompositions successives <i>(top-down design)</i>, mais ne se confond pas avec elle : <a href="Smalltalk" title="Smalltalk">Smalltalk</a>, bon langage de conception <i>top-down</i>, n'est par exemple guère structuré. Dans cette approche les programmeurs décomposent la structure, à large échelle, d'un programme en termes d'opérations plus petites, codent et testent ces petites opérations, et les assemblent pour réaliser le programme (voir aussi <i><a href="Cycle_en_V" title="Cycle en V">Cycle en V</a></i>). Cela n'est évidemment possible que sur des domaines applicatifs déjà bien connus, sans quoi la décomposition risque dès le départ de ne pas être la bonne, ce qui est très difficile à modifier ensuite.
</p><p>À la fin du <a href="XXe_si%C3%A8cle" title="XXe siècle"><abbr class="abbr" title="20ᵉ siècle"><span class="romain">XX</span><sup style="font-size:72%">e</sup></abbr> siècle</a> la plupart des programmeurs avaient adopté la programmation structurée. Dijkstra rappelait qu'un programme devait d'abord être compris par le programmeur et ses collègues chargés de la maintenance, et que si cette tâche était accomplie, le reste — le faire exécuter à la machine — n'était plus que formalité.
</p>
<div class="mw-heading mw-heading2"><h2 id="Antonyme">Antonyme</h2></div>
<ul><li><a href="Programmation_spaghetti" title="Programmation spaghetti">Programmation spaghetti</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Références"><span id="R.C3.A9f.C3.A9rences"></span>Références</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text">Texte original dans <span class="ouvrage" id="Dijkstra1968"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> E. W <a href="Dijkstra" class="mw-redirect" title="Dijkstra">Dijkstra</a>, « <cite style="font-style:normal" lang="en">Go To Statement Considered Harmful</cite> », <i><span class="lang-en" lang="en">Communications of the ACM</span></i>, <abbr class="abbr" title="volume">vol.</abbr> 11, <abbr class="abbr" title="numéro">n<sup>o</sup></abbr> 3, <time class="nowrap" datetime="1968-03" data-sort-value="1968-03">mars 1968</time>, <abbr class="abbr" title="pages">p.</abbr> <span class="nowrap">147-14</span> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Go+To+Statement+Considered+Harmful&rft.jtitle=Communications+of+the+ACM&rft.issue=3&rft.au=Dijkstra&rft.date=1968-03&rft.volume=11&rft.pages=147-14&rft_id=http%3A%2F%2Fwww.u.arizona.edu%2F~rubinson%2Fcopyright_violations%2FGo_To_Considered_Harmful.html&rfr_id=info%3Asid%2Ffr.wikipedia.org%3AProgrammation+structur%C3%A9e"></span></span>.</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><span class="ouvrage"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> « <a rel="nofollow" class="external text" href="http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF"><cite style="font-style:normal;" lang="en">Go To Statement Considered Harmful</cite></a> » <abbr class="abbr indicateur-format format-pdf" title="Document au format Portable Document Format (PDF) d'Adobe">[PDF]</abbr>, sur <span class="italique">University of Texas</span></span>.</span>
</li>
</ol></div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-04-02" href="https://fr.wikipedia.org/wiki/?title=Programmation_structur%C3%A9e&oldid=224487905">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>